Generally speaking, computer systems typically include one or more central processor nodes, referred to simply as xe2x80x9cprocessor nodesxe2x80x9d or xe2x80x9cnodesxe2x80x9d. Each of those processor nodes includes one or more network interface modules, connected to a computer network, for communicating with other processor nodes. Each network interface module has an associated network layer address or IP address to which packets of information are directed. The network layer address allows processor nodes to communicate with one another by sending those packets of information across the computer network. Each packet includes a header that contains the network layer addresses of the originating, or source, processor node and of the destination processor node.
Groups of processor nodes can be connected in an arrangement referred to as a xe2x80x9cclusterxe2x80x9d. Generally, processor nodes within a cluster are more tightly coupled than in a general network environment and act in concert with one another. For example, all of the processor nodes within a cluster can share a common file system such that they are able to access the same files. Also, each of the processor nodes within the cluster can use the same security domain files such that common user names and passwords may be utilized to log on to any of the processor nodes.
A cluster should appear as a single processor node to clients accessing that cluster. In other words, a cluster should present a common set of software services that can be executed by any of the associated processor nodes. Therefore, regardless of which processor node is accessed by a client, the same services will be provided. In such a manner, processor nodes can be seamlessly added to the cluster to increase the capacity of those services without the cluster looking any different to the client.
To make a cluster appear to be a single processor node, it should have a single network layer address. Such a network layer address is referred to as a xe2x80x9ccluster alias addressxe2x80x9d. That cluster alias address should not be tied to one specific node within the cluster but rather should be collectively associated with all the processor nodes. To that end, the cluster""s network layer address must be accessible regardless of what the current membership of the cluster is. The current membership of a cluster is defined by the nodes that are xe2x80x9cupxe2x80x9d and capable of running the software services required by any client accessing the cluster. Accordingly, a client accessing the cluster over a network does not need to know which nodes within the cluster are currently up and running in order to access the software services that the cluster provides.
While each of the nodes in a cluster having a cluster alias address typically provide the same services, some of those nodes may provide those services in a more efficient manner. For example, a node may include a hardware circuit for accelerating a particular operation which the other cluster nodes perform in software, or vice versa. Because prior art clusters simply distribute new connections amongst existing nodes, a client that gains access to the cluster in order to perform the above mentioned operation will be assigned a connection regardless of the capabilities of that chosen node. The operation will be performed, but the client will incur additional overhead if it is connected to one of the nodes that does not have the more efficient capabilities. Therefore, each processor node is associated with specific port numbers. The client application that issued the data packet is also associated up, or binds to, a xe2x80x9cport numberxe2x80x9d.
A port number is essentially a queue into which data packets, that are sent to a processor node, are stored for servicing. Software programs, referred to as receiver applications or datalink applications, execute on the processor nodes of a cluster and monitor specific port numbers for data packets sent from clients via established connections.
Each processor node within the cluster has the ability to distribute received data packets to an appropriate processor node for servicing. The processor node receiving the data packet from the network will hereinafter be referred to as the xe2x80x9creceiving processor nodexe2x80x9d for that transaction. When a data packet arrives at the cluster, the receiving processor node first determines the type of the data packet. For example, most data packets correspond to the TCP/IP or UDP network protocols. The receiving processor node further determines whether the data packet is associated with an existing connection to an application running on one of the processor nodes within the cluster or whether a new connection should be established.
When a receiving processor node receives a new data packet that is addressed to the cluster alias address, and which requests establishment of a new connection, the receiving processor node executes an application to select an available processor node in the cluster. That selection is typically performed without regard to the associated port number. If the receiver application for that processor node is not monitoring the associated port number, a connection cannot be established. In that situation, the connection attempt will timeout and the client will have to re-transmit another connection request. Such an occurrence increases the overhead of the connection operation by increasing the amount of time needed to establish a connection. Further, requiring the client to subsequently re-try a connection attempt destroys the image of the cluster as a single node because the re-transmission of the connection request is an attempt to connect to another processor node in the same cluster.
Further still, when the receiving processor node determines a processor node of the cluster to which a new connection should be established, it retransmits the data packet to the selected processor node over the network. In other words, the data packet""s header is modified to reflect the network layer address of the selected destination processor node, and the data packet is re-broadcast on the network for delivery to that processor node. Such an operation significantly increases the overhead of the data transport operation, as well as the amount of time necessary to establish a connection.
Accordingly, improvements are needed in integrating a cluster of processor nodes, using a cluster alias address, such that the cluster appears as an individual processor node without incurring the detrimental overhead that is present in prior art systems.
The foregoing prior art problems are overcome by the present invention. In accordance with the present invention, a method is disclosed for making a cluster of processor nodes appear as a single processor node to client applications that operate in conjunction with that cluster. More particularly, the cluster is provided with a skinny stack application for selecting a processor node to which a connection will be established as a function of the TCP port numbers that the processor node is monitoring. Further, the cluster is provided with a method for tunneling data packets between processor nodes of the cluster such that they do not have to be re-transmitted across a network. Further still, the cluster is provided with a virtual subnetwork or xe2x80x9csubnetxe2x80x9d to which the cluster alias address can be associated. The route to that subnet being advertised to the network routers by the processor nodes that are associated with the virtual subnet. Lastly, the cluster is provided with a method for preventing retransmission of data packets addressed to a processor node that has failed. With such an approach, the address of the failed processor node is acquired by another processor node for the duration of the routing failover delay. Using such a method, data packets directed to the failed processor node will be serviced during that routing failover delay.
With such an approach, a cluster of processor nodes is made to appear as a highly available single processor node when accessed by client applications running on other clusters.